package com.hawk.eye.common.utils;

import java.util.HashMap;

/**
 * 链式map
 *
 * @author zd
 */
public class Kv extends HashMap<String, Object> {

    private Kv() {
        super();
    }

    /**
     * 创建Kv
     *
     * @return Kv
     */
    public static Kv init() {
        return new Kv();
    }

    /**
     * 创建Kv
     *
     * @return Kv
     */
    public static Kv create() {
        return new Kv();
    }

    public static <K, V> HashMap<K, V> newMap() {
        return new HashMap<>(16);
    }

    /**
     * 设置列
     *
     * @param attr  属性
     * @param value 值
     * @return 本身
     */
    public Kv set(String attr, Object value) {
        this.put(attr, value);
        return this;
    }

    /**
     * 设置列，当键或值为null时忽略
     *
     * @param attr  属性
     * @param value 值
     * @return 本身
     */
    public Kv setIgnoreNull(String attr, Object value) {
        if (null != attr && null != value) {
            set(attr, value);
        }
        return this;
    }

    public Object getObj(String key) {
        return super.get(key);
    }

    /**
     * 获得特定类型值
     *
     * @param <T>          值类型
     * @param attr         字段名
     * @param defaultValue 默认值
     * @return 字段值
     */
    public <T> T get(String attr, T defaultValue) {
        final Object result = get(attr);
        return (T) (result != null ? result : defaultValue);
    }

    @Override
    public Kv clone() {
        Kv clone = new Kv();
        clone.putAll(this);
        return clone;
    }

}
